草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 调用另一个函数重载

我正准备从c++boost库中了解odeint,我需要知道哪个部分做了什么。在boost/numeric/odeint/integrate/integrate_adaptive.hpp中,有一个名为integrate_adaptive的函数。这个函数有一些重载。经过我的一些操作后的简化文件如下:integrate_adaptive_minimal.hpp#defineBOOST_NUMERIC_ODEINT_INTEGRATE_INTEGRATE_ADAPTIVE_HPP_INCLUDED#include#include#include#includeusingnamespacestd

C++ 重载解析、转换运算符和 const

在这种情况下voidf(int*);voidf(constint*);...inti;f(&i);情况很清楚-f(int*)被调用,这似乎是正确的。但是,如果我有这个(这是错误地完成的(*)):classaa{public:operatorbool()const;operatorchar*();};voidfunc(bool);aaa;func(a);operatorchar*()被调用。我不明白为什么这样的决策路径会比使用operatorbool()更好。有什么想法吗?(*)如果将const添加到第二个运算符,代码当然会按预期工作。 最佳答案

c++ - 如何区分重载函数的左值和右值成员函数指针?

我知道我可以这样做来区分右值函数名和左值函数指针:templatevoidtakeFunction(RET_TYPE(&function)(ARGs...)){coutvoidtakeFunction(RET_TYPE(*&function)(ARGs...)){cout而且我希望对成员函数做同样的事情。但是,它似乎没有翻译:structS;voidtakeMemberFunction(void(S::&function)())//errorC2589:'&':illegaltokenonrightsideof'::'{cout为什么?我知道的另一种方法是对常规函数执行此操作:void

c++ - gcc 中的模糊重载,适用于 msvc

以下代码在msvc18.00上编译良好,但在gcc4.9.1上编译失败:#includetemplateclassNum{};classZero{};templateNumoperator+(Num,Num){return{};}templateZerooperator+(Num,Num){return{};}intmain(){Numone;Nummone;Numnull;autoa=one+one;static_assert(std::is_same>::value,":(");autob=one+mone;static_assert(std::is_same::value,":(

深入理解 Java 方法重载与递归应用

Java方法重载方法重载允许在同一个类中定义多个具有相同名称的方法,但参数列表必须不同。语法:returnTypemethodName(parameter1,parameter2,...,parameterN){//方法体}示例:publicclassMain{//重载add方法,支持int和double类型参数staticintadd(intx,inty){returnx+y;}staticdoubleadd(doublex,doubley){returnx+y;}publicstaticvoidmain(String[]args){intsum1=add(10,20);doublesum2

C++:使用重载的复合赋值运算符时出现运行时错误

我有一个程序使用一个类来动态分配一个数组。我有重载运算符,可以对来自该类的对象执行操作。当我测试这个程序时,重载的+=工作,但-=不工作。当试图运行重载的-=时程序崩溃,我得到以下运行时错误:p>malloc:*errorforobject0x7fd388500000:pointerbeingfreedwasnot>allocated*setabreakpointinmalloc_error_breaktodebug在私有(private)成员变量中,我这样声明数组:double*array_d;然后我在重载的构造函数中动态分配数组:Students::Students(intclas

c++ - 参数的重载函数(不可)在编译时推导

有没有一种方法可以通过重载函数来区分参数是在编译时可评估还是仅在运行时可评估?假设我有以下功能:std::stringlookup(intx){returntable::value;}这允许我在恒定时间内(有空间开销)基于参数x选择一个字符串值。然而,在某些情况下x无法在编译时提供,我需要运行一个foo版本,它以更高的时间复杂度进行查找。我当然可以使用不同名称的函数,但我希望有一个统一的界面。我接受了一个答案,但我仍然对完全相同的函数调用是否可以进行这种区分感兴趣。 最佳答案 我相信你能得到的最接近的是重载lookup在int和st

c++ - 删除未使用的重载会导致编译错误?

我正在考虑删除一些未使用的重载,并触发了一个编译错误,编译器说这是一个模板替换错误。但我认为“替换失败不是错误”,无论如何,为什么删除过载会导致它?简单的开始:#includeintParseInt(constchar*);intParseInt(std::string);boolF(int(*)(constchar*));boolUser(){returnF(ParseInt);}在这里,User()使用解析例程的地址调用F。一切都很好。ParseInt已重载,但只有一个重载与F的签名匹配。输入F的模板化重载:boolF(int(*)(constchar*));templatestr

c++ - Clang 和 GCC 在解析可变函数模板重载时的不同行为

考虑这段代码:#includeintfoo_i(intx){returnx+1;}charfoo_c(charx){returnx+1;}usingII=int(*)(int);usingCC=char(*)(char);templatestructfn{Ff;templatedecltype(auto)operator()(Args&&...args)const{returnf(std::forward(args)...);}};structfn_2:privatefn,privatefn{fn_2(IIfp1,CCfp2):fn{fp1},fn{fp2}{}usingfn::ope

c++ - 在没有类声明的情况下使用 Qt 的 Q_DECLARE_FLAGS 和 Q_DECLARE_OPERATORS_FOR_FLAGS

我有以下枚举声明,我想利用Qt中的QFlags支持来实现额外的类型安全:namespacessp{enumVisualAttribute{AttrBrushColor=0x001,AttrBrushTexture=0x002,AttrPenCapStyle=0x004,AttrPenColor=0x008,AttrPenJoinStyle=0x010,AttrPenPattern=0x020,AttrPenScalable=0x040,AttrPenWidth=0x080,AttrSymbolColor=0x100,AttrTextColor=0x200,AttrTextFontFam